package cn.tedu.blog.server.mapper;

import cn.tedu.blog.server.pojo.dto.UserAddNewDTO;
import cn.tedu.blog.server.pojo.dto.UserDetailsDTO;
import cn.tedu.blog.server.pojo.dto.UserLoginDTO;
import cn.tedu.blog.server.pojo.entity.User;
import cn.tedu.blog.server.pojo.vo.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @Author: 雷茂林
 * @Date:2022/7/15 14:37
 * @Description: 用户管理-数据库进行数据持久化操作映射
 */
@Repository
public interface UserMapper {

    /**
     * 创建用户
     *
     * @param user
     * @return
     */
    Integer createUser(User user);



    /**
     * 删除用户
     * @param id
     * @return
     */
    Integer deleteById(Long id);



    /**
     * 批量删除用户
     * @param list
     * @return
     */
    Integer deleteByIds(List<Long> list);



    /**
     * 修改用户基本信息
     * @param userAddNewDTO
     * @return
     */
    Integer updateById(UserAddNewDTO userAddNewDTO);



    /**
     * 用户修改密码
     * @param userLoginDTO
     * @return
     */
    Integer updatePasswordByUserName(UserLoginDTO userLoginDTO);



    /**
     * 根据id判断用户是否已存在
     * @param id
     * @return
     */
    Integer isById(Long id);



    /**
     * 查询注册账号是否已被注册
     * @param username
     * @return
     */
    Integer isByUsername(String username);



    /**
     * 查询注册昵称是否已被注册
     * @param nick
     * @return
     */
    Integer isByNick(String nick);



    /**
     * 判断修改后的账号是否已经重复
     * @param id
     * @param username
     * @return
     */
    Integer isUpdateByUsername(@Param("id")Long id ,@Param("username")String username);



    /**
     * 判断修改后的昵称是否已经重复
     * @param id
     * @param nick
     * @return
     */
    Integer isUpdateByNick(@Param("id")Long id ,@Param("nick")String nick);



    /**
     * 根据条件查询结果集的数量
     * @return
     */
    int getCountAll(UserListVO userListVO);



    /**
     * 根据用户id回显用户信息
     * @param id
     * @return
     */
    UserListVO getBackFillById(Long id);


    /**
     * 根据手机号回显用户账号
     * @param phone
     * @return
     */
    String getUserNameByPhone(String phone);


    /**
     * 根据用户名查询用户权限
     * @param username
     * @return
     */
    UserLoginVO getByUsername(String username);


    /**
     * 分页条件查询用户信息
     * @param userListVO
     * @return
     */
    List<UserListVO> listByKeyword(UserListVO userListVO);

    /**
     *查询用户数量
     * @return
     */
    Long getUserCount();


    /**
     *  根据用户id查询用户部分信息
     */
    UserCenterDetailVO UserInformationByUserId(Long id);

    /**
     * 根据用户id查询用户关注博主
     * @param userId    用户id
     * @param pagSize   查询条数
     * @return  用户关注的博主列表
     */
    List<UserFollowDetailVO> getUserByUserId(Long userId, int pagSize);

    /**
     * 根据用户id查询粉丝列表
     * @param userId    用户id
     * @param pagSize   查询条数
     * @return  关注用户的粉丝列表
     */
    List<UserFollowDetailVO> getFansByUserId(Long userId, int pagSize);

    /**
     * 根据用户id查询用户详细信息
     * @param userId    用户id
     * @return  用户详细信息
     */
    UserDetailsVO getUserDetailByUserId(Long userId);

    /**
     * 根据用户id修改用户数据
     * @param userDetailsDTO 用户信息
     * @return  修改成功的条数
     */
    int updateUserByUserId(UserDetailsDTO userDetailsDTO);


    /**
     * 根据用户手机号回显用户信息
     * @param phone
     * @return
     */
    UserListVO getBackFillByPhone(String phone);

    /**
     * 查询注册手机号是否已被注册
     * @param phone
     * @return
     */
    Integer isPhone(String phone);
}
